package config

import (
	"github.com/spf13/viper"
	"log"
)

// Config 结构体定义应用配置
type Config struct {
	App struct {
		Name string
		Port string
	}

	Database struct {
		DSN          string
		MaxIdleConns int
		MaxOpenConns int
	}

	Redis struct {
		Addr      string
		SlaveAddr string
		DB        int
		Password  string
	}

	Cos struct {
		SecretID  string
		SecretKey string
		BucketAID string
	}
}

// GlobalConfig 是全局配置变量
var GlobalConfig *Config

// InitConfig 初始化配置
func InitConfig() {
	viper.SetConfigName("config")   // 配置文件名称（不带扩展名）
	viper.SetConfigType("yaml")     // 配置文件类型
	viper.AddConfigPath("./config") // 配置文件路径

	if err := viper.ReadInConfig(); err != nil {
		log.Printf("error reading config file: %v", err)
	}

	var config Config
	if err := viper.Unmarshal(&config); err != nil {
		log.Printf("unable to decode into struct: %v", err)
	}

	GlobalConfig = &config
	log.Println("Configuration loaded successfully")
	// 构建资源路径
	SERVER_RESOURCES = "http://" + LOCAL_IP_ADDRESS + GlobalConfig.App.Port + "/public/"

	InitDB()
	initRedis()
}
